<?php
if (!defined('EZSITETPL_SOAP')) die('access violation error!');

function _urlprefix() {
    $server_port = '';
    
    if (isset($_SERVER['HTTPS']) && 
        trim($_SERVER['HTTPS']) == 'on') {
        $proto_schema = 'https://';
        if (intval($_SERVER['SERVER_PORT']) != 443) {
            $server_port = ':'.strval($_SERVER['SERVER_PORT']);
        }
    } else {
        $proto_schema = 'http://';
        if (intval($_SERVER['SERVER_PORT']) != 80) {
            $server_port = ':'.strval($_SERVER['SERVER_PORT']);
        }
    }
    
    $curr_path = trim(str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])));
    if (preg_match('/\/$/', $curr_path)) {
        $curr_path = substr($curr_path, 0, -1);
    }
    
    return $proto_schema.$_SERVER['HTTP_HOST'].$server_port.$curr_path;
}

function output_file($file, $name) {
    /*
    This function takes a path to a file to output ($file), 
    the filename that the browser will see ($name) and 
    the MIME type of the file ($mime_type, optional).

    If you want to do something on download abort/finish,
    register_shutdown_function('function_name');
    */
    if(!is_readable($file)) die('File not found or inaccessible!');

    $size = filesize($file);
    $name = rawurldecode($name);

	$mime_type="application/octet-stream";

    @ob_end_clean(); //turn off output buffering to decrease cpu usage

    // required for IE, otherwise Content-Disposition may be ignored
    if (ini_get('zlib.output_compression'))
        ini_set('zlib.output_compression', 'Off');

    header('Content-Type: '.$mime_type);
    header('Content-Disposition: attachment; filename="'.$name.'"');
    header("Content-Transfer-Encoding: binary");
    header('Accept-Ranges: bytes');

    /* The three lines below basically make the 
    download non-cacheable */
    header("Cache-control: private");
    header('Pragma: private');
    header("Expires: ".date('r', 0));

    // multipart-download and download resuming support
    if (isset($_SERVER['HTTP_RANGE'])) {
        list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
        list($range) = explode(",",$range,2);
        list($range, $range_end) = explode("-", $range);
        $range = intval($range);
        if(!$range_end) {
	        $range_end = $size-1;
        } else {
	        $range_end = intval($range_end);
        }

        $new_length = $range_end-$range+1;
        header("HTTP/1.1 206 Partial Content");
        header("Content-Length: $new_length");
        header("Content-Range: bytes $range-$range_end/$size");
    } else {
        $new_length = $size;
        header("Content-Length: ".$size);
    }

    /* output the file itself */
    $chunksize = 1 * (1024 * 1024); //you may want to change this
    $bytes_send = 0;
    if ($file = fopen($file, 'r')) {
        if (isset($_SERVER['HTTP_RANGE']))
            fseek($file, $range);

        while(!feof($file) && 
	        (!connection_aborted()) && 
	        ($bytes_send<$new_length))
        {
	        $buffer = fread($file, $chunksize);
	        print($buffer); //echo($buffer); // is also possible
	        flush();
	        $bytes_send += strlen($buffer);
        }
        fclose($file);
    } else
        die('Can not open file.');

    exit(0);
}

